Sample-Code-Snippets/Python/Azure Function Example/example_orchestrator.py (36 lines of code) (raw):
import azure.functions as func
import azure.durable_functions as df
import json
import logging
import os
orchestrator = df.Blueprint(http_auth_level=func.AuthLevel.ANONYMOUS)
@orchestrator.orchestration_trigger(context_name="context")
def orchestrator_function(context: df.DurableOrchestrationContext):
# Grab the message incoming from EventHub
incoming_message = context.get_input()
# Check if message says Left or Right...
direction = yield context.call_activity("check_state", incoming_message)
result = False
match(direction):
case "left":
result = yield context.call_activity("left_only", incoming_message)
case "right":
result = yield context.call_activity("right_only", incoming_message)
return result
@orchestrator.activity_trigger(input_name="incoming")
def check_state(incoming):
logging.info(f"Checking if the message goes to the left or the right queue.")
message = json.loads(incoming)
direction = message['direction_data']['direction']
logging.info(f"We are going {direction}!")
return direction
@orchestrator.event_hub_output(arg_name="dleft", event_hub_name=os.environ['LEventHubTopic'], connection="EventHubConnection")
@orchestrator.activity_trigger(input_name="left")
def left_only(dleft: func.Out[str], left):
logging.info(msg=f"Sending message to left eventhub.")
dleft.set(left)
return True
@orchestrator.event_hub_output(arg_name="dright", event_hub_name=os.environ['REventHubTopic'], connection="EventHubConnection")
@orchestrator.activity_trigger(input_name="right")
def right_only(dright: func.Out[str], right):
logging.info(msg=f"Sending message to right eventhub.")
dright.set(right)
return True